import { fileURLToPath, URL } from 'node:url'

import { defineConfig, UserConfig, ConfigEnv, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import VueSetupExtend from 'vite-plugin-vue-setup-extend' //组件命名
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const env = loadEnv(mode, process.cwd())

  return {
    // base: "rain-for-job",// 根目录 => import.meta.env.BASE_URL
    server: {
      // 允许IP访问
      host: '0.0.0.0',
      // 应用端口 (默认:3000)
      port: 3000,
      // 运行是否自动打开浏览器
      open: true,
      proxy: {
        /**
         * 反向代理解决跨域配置
         * http://localhost:3000/dev-api/users (F12可见请求路径) => http://localhost:8989/users (实际请求后端 API 路径)
         *
         * env.VITE_APP_BASE_API: /dev-api
         * env.VITE_APP_API_URL: http://localhost:8989
         */
        '/api': {
          changeOrigin: true,
          target: 'http://127.0.0.1:8080', //后端地址
          rewrite: (path) => {
            //  前端：/dev-api/api/v1/users/me  --> 后端： /api/v1/users/me

            /* 
            表面肉眼看到的请求地址: http://localhost:3000/dev-api/api/v1/users/me
            
            真实访问的代理目标地址: http://vapi.youlai.tech/api/v1/users/me
            
            */
            return path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '') //重写路径
          }
        }
      }
    },
    plugins: [
      vue(),
      VueSetupExtend(),
      AutoImport({
        imports: ['vue', '@vueuse/core'], // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
        // 生成自动导入的TS声明文件
        // dts: "src/typings/auto-import.d.ts",
        // 配置文件生成位置(false:关闭自动生成)
        dts: false,
        resolvers: [ElementPlusResolver()]
      }),
      Components({
        resolvers: [
          ElementPlusResolver(),
          AntDesignVueResolver({
            importStyle: false // css in js
          })
        ],
        // 配置文件生成位置(false:关闭自动生成)
        dts: false
      })
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    }
  }
})
